// 使用require.context

//传入三个参数
//第一个参数是要搜索的目录
//第二个参数是标记是否需要搜索其子目录
//第三个参数一个匹配文件的正则
//表示以.vue结尾的问价

let files = require.context("../pages", true, /\.vue$/)

// console.log(files.keys())
// files.keys()得到的是一个以数组形式存在的路径 但是是./开头的 ./Home/index.vue

//编写方法生成配置路由
let repeatRoutes = files.keys().map(path => {
    // console.log(files(path))
    //上面会得到一个对应每个路径的对象 其中default 中的_file 会得到 src/pages/Login/index.vue 
    // console.log(path)
    // 上面得到 ./Home/Welcome/index.vue
    // 使用正则过滤/index.vue 或者以.vue结尾的
    let regExp = /(\/index\.vue|\.vue)$/
    let com = files(path).default
    // console.log("@",com.meta)
    path = path.replace(regExp, "").substring(1)
    // console.log(path)
    return {
        //重定向
        redirect: com.redirect ?? null,
        //具名路由
        name:com.name ?? path.substring(1).split("/").join("-"),
        meta: com.meta ?? {},//路由元信息
        path: path.toLowerCase(),
        component: () => import("@/pages" + path)
    }
})

console.log(repeatRoutes)

// repeatRoutes 是扁平化配置路由,需要转换成树形结构
const convertTree = (repeatRoutes) => {
    //给每条数据加上id如果是嵌套路由就加上pid

    let treeRoues = [] //声明一个空数组用于存放树形的routes配置
    //遍历repeatRoutes  对数据进行id处理
    repeatRoutes.forEach(route => {
        //将path对象作为当前对象的id
        //    console.log(route.path)   => /home/welcome
        let pathArr = route.path.substring(1).split("/")
        // console.log(pathArr)  => ['home', 'welcome']
        //给每个对象生成id
        route.id = pathArr.join("-")
        // 如果数组中的长度大于1 说明是子路由 需要添加pid
        if (pathArr.length > 1) {
            //pid就是parent id 父级的id 数组中的最后一项去掉 就是父级的id了
            let pidArr = [...pathArr]//浅拷贝
            pidArr.pop()
            route.pid = pidArr.join("-")
        }
    })

    //把平铺数据变成嵌套的树形数据
    repeatRoutes.forEach(route => {
        //找数据pid与数据id相等的  只要相等就是父子关系
        let parent = repeatRoutes.find(v => v.id === route.pid)
        if(parent){
            //当前的route对象,找到父节点
            //判断父节点有没有children属性,如果没有就创建
            if(!parent.children){
                parent.children = []
            }
            route.path = route.path.split("/").pop()
            parent.children.push(route)
        }else{
            treeRoues.push(route)
        }
    })

    return treeRoues
}

let res = convertTree(repeatRoutes)
// console.log(res)
export default res